/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package grasp1;

import java.util.ArrayList;

/**
 *
 * @author WALTER
 */
public class Solucion {
    private ArrayList<Empleado> asignados = new ArrayList();
    private double funcionObjetivo ;
    private ArrayList<Galleta> galletas = new ArrayList();

    /**
     * @return the asignados
     */
    public ArrayList<Empleado> getAsignados() {
        return asignados;
    }

    /**
     * @param asignados the asignados to set
     */
    public void setAsignados(ArrayList<Empleado> asignados) {
        this.asignados = asignados;
    }

    /**
     * @return the funcionObjetivo
     */
    public double getFuncionObjetivo() {
        return funcionObjetivo;
    }

    /**
     * @param funcionObjetivo the funcionObjetivo to set
     */
    public void setFuncionObjetivo(double funcionObjetivo) {
        this.funcionObjetivo = funcionObjetivo;
    }
    
    public void calcularObjetivoTotal(double costo){
        this.setFuncionObjetivo(0);
        for (int i=0;i<asignados.size();i++){
            calcularObjetivo(asignados.get(i),costo);
        }
    }
    
    public void calcularObjetivo(Empleado emp, double costo){
        int i = 0;
        int pos_tipomaq = emp.getTipoMaquinaAsignada() -1;
        for( i =0; i < emp.getGalletaAsignada().getTipogalleta().getPorcentajesValor().size() ;i++){
            if( emp.getTipoMaquinaAsignada()== emp.getGalletaAsignada().getTipogalleta().getMaquinasProceso().get(i)) break;
        }
        double porprecio = emp.getGalletaAsignada().getTipogalleta().getPorcentajesValor().get(i);
        double porcosto = emp.getGalletaAsignada().getTipogalleta().getPorcentajesCosto().get(i);
        int produccion = emp.getProduccion()[pos_tipomaq];
        int merma = emp.getMermas()[pos_tipomaq];
        if(produccion == 0 && merma != 0) 
            this.funcionObjetivo= this.funcionObjetivo - 2*costo;
        else if(produccion != 0 && merma ==0) 
            this.funcionObjetivo = this.funcionObjetivo + costo ;
        else this.funcionObjetivo = this.funcionObjetivo + 
       (produccion*emp.getGalletaAsignada().getTipogalleta().getPrecio()*porprecio)
       /(merma*emp.getGalletaAsignada().getTipogalleta().getCosto()*porcosto)
       - costo;
       
    }

    /**
     * @return the galletas
     */
    public ArrayList<Galleta> getGalletas() {
        return galletas;
    }

    /**
     * @param galletas the galletas to set
     */
    public void setGalletas(ArrayList<Galleta> galletas) {
        this.galletas = galletas;
    }
    
    public void mostrarsol(Solucion solfinal){
//        for(int i=0;i < solfinal.getAsignados().size() ;i++){  
//            System.out.println("Empleado: "+solfinal.getAsignados().get(i).getIdempleado()+"galleta"+solfinal.getAsignados().get(i).getGalletaAsignada().getIdgalleta()+"tipomaquina"+solfinal.getAsignados().get(i).getTipoMaquinaAsignada() ); 
//        }
          System.out.println("Funcion Objetivo"+solfinal.getFuncionObjetivo());
         for(int i=0;i < solfinal.getGalletas().size() ;i++){  
          System.out.println("Galleta:"+solfinal.getGalletas().get(i).getIdgalleta()+"Demanda cubierta"+solfinal.getGalletas().get(i).getDemandacubierta()+"de"+solfinal.getGalletas().get(i).getNumGalletasPedidas());
         }
          System.out.println("asignaciones"+solfinal.getAsignados().size());
    }
}
